Retro Gaming

Sources

Processors Used

MOS 6502

  • NES (Ricoh 2A03), Atari 2600

  • 1975

  • Architecture: 8-bit, little-endian

  • Registers:

    • A (accumulator), X, Y

    • SP (8-bit), PC (16-bit)

    • Status flags (NV-BDIZC)

  • Address space: 16-bit → 64 KB

  • Clock:

    • NES: ~1.79 MHz (NTSC)

    • Atari 2600: ~1.19 MHz

  • Instruction set:

    • ~56 official instructions (+ undocumented opcodes)

    • No multiply/divide

  • Stack:

    • Fixed at page $0100 (256 bytes)

  • Interrupts:

    • IRQ, NMI, RESET

  • Programming:

    • Assembly:

      • 6502 assembly (no official syntax standard)

      • Common assembler syntaxes:

        • ca65 (cc65 toolchain)

        • NESASM style

        • KickAssembler (more modern)

    • Modern languages usable today:

      • C via cc65

      • Most common option

      • Generates reasonably efficient code but still requires asm for hot paths

    • Some experimental:

      • Subsets of C++ (very limited)

      • Custom DSLs/macros (KickAssembler scripting)

Zilog Z80

  • Game Boy (Sharp LR35902), Sega Master System, Sega Game Gear

  • 1976

  • Architecture: 8-bit CPU with some 16-bit ops

  • Registers:

    • AF, BC, DE, HL (can split into 8-bit)

    • Alternate register set (AF', BC', DE', HL')

    • IX, IY (index registers)

    • SP, PC

    • Address space: 64 KB

  • Clock:

    • Game Boy: ~4.19 MHz

    • Master System: ~3.58 MHz

  • Instruction set:

    • Richer than 6502

    • Bit operations, block instructions

  • Interrupts:

    • Maskable + non-maskable

  • Programming:

    • Assembly:

      • Z80 assembly

      • Game Boy uses a modified Z80-like ISA (LR35902)

    • Modern languages usable today:

      • C via:

        • GBDK (Game Boy)

        • SDCC (Small Device C Compiler)

      • Limited:

        • Some Rust experiments (not mainstream)

        • Very constrained C++

    • Reality:

      • C is widely used for Game Boy

      • Assembly still required for:

        • Graphics

        • Interrupts

        • Tight loops

Motorola 68000

  • Sega Genesis / Mega Drive

  • 1979

  • Architecture: 16-bit external bus, 32-bit internal

  • Registers:

    • 8 data registers (D0–D7, 32-bit)

    • 8 address registers (A0–A7, 32-bit)

  • Address space: 24-bit → 16 MB

  • Clock: ~7.67 MHz (NTSC)

  • Instruction set:

    • Rich CISC, orthogonal

    • Built-in multiply/divide

    • Endianness: Big-endian

  • Stack:

    • Uses A7 (user/supervisor modes)

  • Interrupts:

    • 7 priority levels

  • Notable traits:

    • Very clean ISA

    • Excellent for C

  • Console context:

    • Paired with a Z80 for audio/control

  • Programming:

    • Assembly:

      • 68000 assembly (fairly standardized)

      • Syntax variants:

        • GNU as

        • VASM

        • Devkit-specific assemblers

    • Modern languages usable today:

      • C (excellent support)

      • SGDK (very popular)

      • GCC-based cross-compilers

      • C++ (limited but usable)

      • Requires care (no heavy runtime features)

      • Experimental:

        • Rust (early-stage hobby tooling)

    • Reality:

      • This is the first “comfortable” C platform

      • Many full games written mostly in C

Sharp LR35902

  • 1980

  • Clock: ~4.19 MHz (GB), ~8.38 MHz (GBC double speed)

  • Architecture: 8-bit

  • Registers: AF, BC, DE, HL, SP, PC

  • Missing vs Z80:

    • No IX/IY

    • No many advanced ops

  • Programming:

    • Assembly:

      • Game Boy-specific assembly (RGBDS syntax common)

    • Modern languages:

      • C via GBDK

      • SDCC backend

      • Some Rust experiments (not mature)

    • Reality:

      • One of the best-supported retro platforms today

      • C is very viable

WDC 65C816

  • SNES (Ricoh 5A22)

  • 1983

  • Architecture: 8/16-bit hybrid

  • Registers:

    • A (8 or 16-bit)

    • X, Y (8 or 16-bit)

    • 16-bit SP, PC

    • Data Bank (DB), Program Bank (PB)

  • Address space: 24-bit → 16 MB

  • Clock:

    • ~3.58 MHz (varies with memory access)

  • Modes:

    • Emulation mode (6502-compatible)

    • Native mode (full 16-bit)

  • Instruction set:

    • Extended 6502

  • Interrupts:

    • IRQ, NMI, ABORT

  • Notable traits:

    • Banked memory model

    • Still relatively constrained vs 68000

  • Programming:

    • Assembly:

      • 65C816 assembly (extension of 6502)

      • Common tools:

        • WLA-DX

        • ca65 (with extensions)

    • Modern languages usable today:

      • C via cc65

      • Works, but:

        • Banked memory complicates everything

        • Codegen not ideal for large projects

      • Minimal higher-level support

    • Reality:

      • Heavy assembly usage still common

      • C is viable but awkward for large systems

MIPS R3000

  • PlayStation (Sony)

  • 1988

  • Architecture: 32-bit RISC

  • Registers:

    • 32 general-purpose registers (32-bit)

    • HI/LO (multiply/divide results)

  • Address space: 32-bit → 4 GB (segmented)

  • Clock: ~33.87 MHz

  • Pipeline: 5-stage pipeline

  • Instruction set:

    • Load/store architecture

    • Fixed 32-bit instructions

    • FPU: None (software or coprocessor)

  • Endianness: Little-endian (PS1)

  • Notable traits:

    • Branch delay slots

    • Requires careful pipeline-aware code

  • Console context:

    • GPU + GTE (geometry transform engine)

  • Programming:

    • Assembly:

      • MIPS I assembly

    • Modern languages usable today:

      • C (primary language)

        • PSn00bSDK

      • C++ (usable)

        • Often used with restrictions (no RTTI/exceptions)

      • Experimental:

        • Rust (very niche, not production-ready)

    • Reality:

      • Mostly C + some assembly

      • Assembly used for:

        • GPU command building

        • Performance-critical math

Hitachi SH-2

  • Sega Saturn (dual CPU setup)

  • 1990

  • Architecture: 32-bit RISC

  • Registers:

    • 16 general-purpose registers

    • PC, PR (procedure register), SR

  • Clock: ~28.6 MHz

  • Pipeline: 5-stage

  • Instruction set:

    • Fixed 16-bit instructions (compact RISC)

  • Cache: Small instruction cache

  • Notable traits:

    • Designed for embedded use

  • Console context:

    • Dual SH-2 CPUs (parallelism complexity)

    • Difficult synchronization

  • Programming:

    • Assembly:

      • SH-2 assembly (compact 16-bit instruction encoding)

    • Modern languages usable today:

      • C (main option)

        • GCC cross-compilers exist

      • Limited:

        • C++ possible but uncommon

    • Reality:

      • Biggest difficulty is not language—it’s:

        • Dual CPU synchronization

        • Complex hardware

NEC VR4300

  • Nintendo 64

  • Architecture: MIPS III (64-bit capable)

  • Registers:

    • 32 general-purpose (64-bit)

  • Clock: ~93.75 MHz

  • Address space: 32-bit (console-limited)

  • FPU: Integrated

  • Cache:

    • 16 KB instruction

    • 8 KB data

  • Pipeline: 5-stage

  • Notable traits:

    • 64-bit registers but often used in 32-bit mode

  • Console context:

    • Tight coupling with RCP (graphics + audio)

  • Programming:

    • Assembly:

      • MIPS III assembly

    • Modern languages usable today:

      • C (primary)

        • libultra-based toolchains

        • modern homebrew SDKs

      • C++ (commonly used today in homebrew)

      • Experimental:

        • Rust (early-stage)

    • Reality:

      • Most modern N64 homebrew is C or C++

      • Assembly used selectively

Screen Resolutions

  • 160x144px

    • Game Boy / Game Boy Color / Game Gear

    • 1.11 (10:9)

  • 160x152px

    • Neo Geo Pocket

    • 1.05

  • 224x144px

    • WonderSwan

    • (14:9)

  • 240x160px

    • Game Boy Advance

    • 1.5 (3:2 pure)

  • 256x192px

    • Sega Master System

    • 1.33 (4:3 pure)

  • 256x224px

    • Super Nintendo (most games)

  • 320x224px

    • Sega Genesis (Non-square pixels) / Sega Saturn

    • 1.43 (4:3)

    • Confortável

  • 256x240px

    • Nintendo (NES) / Super Nintendo (SNES)

    • 1.07 (4.3)

  • 320x240px

    • PlayStation 1 / Nintendo 64

    • 1.33 (4:3 pure)

    • Confortável

  • 400x240px

    • Nintendo 3DS Top Screen

    • 1.67 (15:9)

  • 400x272px

    • 1.76:1 (16:9)

Emulation

FPGAs